home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / sys / stat.h < prev    next >
C/C++ Source or Header  |  2008-09-29  |  17KB  |  536 lines

  1. /* Copyright (C) 1991, 1992, 1995-2004, 2005, 2006, 2007
  2.    Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.  
  5.    The GNU C Library is free software; you can redistribute it and/or
  6.    modify it under the terms of the GNU Lesser General Public
  7.    License as published by the Free Software Foundation; either
  8.    version 2.1 of the License, or (at your option) any later version.
  9.  
  10.    The GNU C Library is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    Lesser General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU Lesser General Public
  16.    License along with the GNU C Library; if not, write to the Free
  17.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.    02111-1307 USA.  */
  19.  
  20. /*
  21.  *    POSIX Standard: 5.6 File Characteristics    <sys/stat.h>
  22.  */
  23.  
  24. #ifndef    _SYS_STAT_H
  25. #define    _SYS_STAT_H    1
  26.  
  27. #include <features.h>
  28.  
  29. #include <bits/types.h>        /* For __mode_t and __dev_t.  */
  30.  
  31. #if defined __USE_XOPEN || defined __USE_XOPEN2K || defined __USE_MISC \
  32.          || defined __USE_ATFILE
  33. # if defined __USE_XOPEN || defined __USE_XOPEN2K
  34. #  define __need_time_t
  35. # endif
  36. # if defined __USE_MISC || defined __USE_ATFILE
  37. #  define __need_timespec
  38. # endif
  39. # include <time.h>        /* For time_t resp. timespec.  */
  40. #endif
  41.  
  42. #if defined __USE_XOPEN || defined __USE_XOPEN2K
  43. /* The Single Unix specification says that some more types are
  44.    available here.  */
  45. # ifndef __dev_t_defined
  46. typedef __dev_t dev_t;
  47. #  define __dev_t_defined
  48. # endif
  49.  
  50. # ifndef __gid_t_defined
  51. typedef __gid_t gid_t;
  52. #  define __gid_t_defined
  53. # endif
  54.  
  55. # ifndef __ino_t_defined
  56. #  ifndef __USE_FILE_OFFSET64
  57. typedef __ino_t ino_t;
  58. #  else
  59. typedef __ino64_t ino_t;
  60. #  endif
  61. #  define __ino_t_defined
  62. # endif
  63.  
  64. # ifndef __mode_t_defined
  65. typedef __mode_t mode_t;
  66. #  define __mode_t_defined
  67. # endif
  68.  
  69. # ifndef __nlink_t_defined
  70. typedef __nlink_t nlink_t;
  71. #  define __nlink_t_defined
  72. # endif
  73.  
  74. # ifndef __off_t_defined
  75. #  ifndef __USE_FILE_OFFSET64
  76. typedef __off_t off_t;
  77. #  else
  78. typedef __off64_t off_t;
  79. #  endif
  80. #  define __off_t_defined
  81. # endif
  82.  
  83. # ifndef __uid_t_defined
  84. typedef __uid_t uid_t;
  85. #  define __uid_t_defined
  86. # endif
  87. #endif    /* X/Open */
  88.  
  89. #ifdef __USE_UNIX98
  90. # ifndef __blkcnt_t_defined
  91. #  ifndef __USE_FILE_OFFSET64
  92. typedef __blkcnt_t blkcnt_t;
  93. #  else
  94. typedef __blkcnt64_t blkcnt_t;
  95. #  endif
  96. #  define __blkcnt_t_defined
  97. # endif
  98.  
  99. # ifndef __blksize_t_defined
  100. typedef __blksize_t blksize_t;
  101. #  define __blksize_t_defined
  102. # endif
  103. #endif    /* Unix98 */
  104.  
  105. __BEGIN_DECLS
  106.  
  107. #include <bits/stat.h>
  108.  
  109. #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
  110. # define S_IFMT        __S_IFMT
  111. # define S_IFDIR    __S_IFDIR
  112. # define S_IFCHR    __S_IFCHR
  113. # define S_IFBLK    __S_IFBLK
  114. # define S_IFREG    __S_IFREG
  115. # ifdef __S_IFIFO
  116. #  define S_IFIFO    __S_IFIFO
  117. # endif
  118. # ifdef __S_IFLNK
  119. #  define S_IFLNK    __S_IFLNK
  120. # endif
  121. # if (defined __USE_BSD || defined __USE_MISC || defined __USE_UNIX98) \
  122.      && defined __S_IFSOCK
  123. #  define S_IFSOCK    __S_IFSOCK
  124. # endif
  125. #endif
  126.  
  127. /* Test macros for file types.    */
  128.  
  129. #define    __S_ISTYPE(mode, mask)    (((mode) & __S_IFMT) == (mask))
  130.  
  131. #define    S_ISDIR(mode)     __S_ISTYPE((mode), __S_IFDIR)
  132. #define    S_ISCHR(mode)     __S_ISTYPE((mode), __S_IFCHR)
  133. #define    S_ISBLK(mode)     __S_ISTYPE((mode), __S_IFBLK)
  134. #define    S_ISREG(mode)     __S_ISTYPE((mode), __S_IFREG)
  135. #ifdef __S_IFIFO
  136. # define S_ISFIFO(mode)     __S_ISTYPE((mode), __S_IFIFO)
  137. #endif
  138. #ifdef __S_IFLNK
  139. # define S_ISLNK(mode)     __S_ISTYPE((mode), __S_IFLNK)
  140. #endif
  141.  
  142. #if defined __USE_BSD && !defined __S_IFLNK
  143. # define S_ISLNK(mode)  0
  144. #endif
  145.  
  146. #if (defined __USE_BSD || defined __USE_UNIX98) \
  147.     && defined __S_IFSOCK
  148. # define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
  149. #endif
  150.  
  151. /* These are from POSIX.1b.  If the objects are not implemented using separate
  152.    distinct file types, the macros always will evaluate to zero.  Unlike the
  153.    other S_* macros the following three take a pointer to a `struct stat'
  154.    object as the argument.  */
  155. #ifdef    __USE_POSIX199309
  156. # define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
  157. # define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
  158. # define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
  159. #endif
  160.  
  161.  
  162. /* Protection bits.  */
  163.  
  164. #define    S_ISUID __S_ISUID    /* Set user ID on execution.  */
  165. #define    S_ISGID    __S_ISGID    /* Set group ID on execution.  */
  166.  
  167. #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
  168. /* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
  169. # define S_ISVTX    __S_ISVTX
  170. #endif
  171.  
  172. #define    S_IRUSR    __S_IREAD    /* Read by owner.  */
  173. #define    S_IWUSR    __S_IWRITE    /* Write by owner.  */
  174. #define    S_IXUSR    __S_IEXEC    /* Execute by owner.  */
  175. /* Read, write, and execute by owner.  */
  176. #define    S_IRWXU    (__S_IREAD|__S_IWRITE|__S_IEXEC)
  177.  
  178. #if defined __USE_MISC && defined __USE_BSD
  179. # define S_IREAD    S_IRUSR
  180. # define S_IWRITE    S_IWUSR
  181. # define S_IEXEC    S_IXUSR
  182. #endif
  183.  
  184. #define    S_IRGRP    (S_IRUSR >> 3)    /* Read by group.  */
  185. #define    S_IWGRP    (S_IWUSR >> 3)    /* Write by group.  */
  186. #define    S_IXGRP    (S_IXUSR >> 3)    /* Execute by group.  */
  187. /* Read, write, and execute by group.  */
  188. #define    S_IRWXG    (S_IRWXU >> 3)
  189.  
  190. #define    S_IROTH    (S_IRGRP >> 3)    /* Read by others.  */
  191. #define    S_IWOTH    (S_IWGRP >> 3)    /* Write by others.  */
  192. #define    S_IXOTH    (S_IXGRP >> 3)    /* Execute by others.  */
  193. /* Read, write, and execute by others.  */
  194. #define    S_IRWXO    (S_IRWXG >> 3)
  195.  
  196.  
  197. #ifdef    __USE_BSD
  198. /* Macros for common mode bit masks.  */
  199. # define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
  200. # define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
  201. # define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
  202.  
  203. # define S_BLKSIZE    512    /* Block size for `st_blocks'.  */
  204. #endif
  205.  
  206.  
  207. #ifndef __USE_FILE_OFFSET64
  208. /* Get file attributes for FILE and put them in BUF.  */
  209. extern int stat (__const char *__restrict __file,
  210.          struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
  211.  
  212. /* Get file attributes for the file, device, pipe, or socket
  213.    that file descriptor FD is open on and put them in BUF.  */
  214. extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
  215. #else
  216. # ifdef __REDIRECT_NTH
  217. extern int __REDIRECT_NTH (stat, (__const char *__restrict __file,
  218.                   struct stat *__restrict __buf), stat64)
  219.      __nonnull ((1, 2));
  220. extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
  221.      __nonnull ((2));
  222. # else
  223. #  define stat stat64
  224. #  define fstat fstat64
  225. # endif
  226. #endif
  227. #ifdef __USE_LARGEFILE64
  228. extern int stat64 (__const char *__restrict __file,
  229.            struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
  230. extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
  231. #endif
  232.  
  233. #ifdef __USE_ATFILE
  234. /* Similar to stat, get the attributes for FILE and put them in BUF.
  235.    Relative path names are interpreted relative to FD unless FD is
  236.    AT_FDCWD.  */
  237. # ifndef __USE_FILE_OFFSET64
  238. extern int fstatat (int __fd, __const char *__restrict __file,
  239.             struct stat *__restrict __buf, int __flag)
  240.      __THROW __nonnull ((2, 3));
  241. # else
  242. #  ifdef __REDIRECT_NTH
  243. extern int __REDIRECT_NTH (fstatat, (int __fd, __const char *__restrict __file,
  244.                      struct stat *__restrict __buf,
  245.                      int __flag),
  246.                fstatat64) __nonnull ((2, 3));
  247. #  else
  248. #   define fstatat fstatat64
  249. #  endif
  250. # endif
  251.  
  252. extern int fstatat64 (int __fd, __const char *__restrict __file,
  253.               struct stat64 *__restrict __buf, int __flag)
  254.      __THROW __nonnull ((2, 3));
  255. #endif
  256.  
  257. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  258. # ifndef __USE_FILE_OFFSET64
  259. /* Get file attributes about FILE and put them in BUF.
  260.    If FILE is a symbolic link, do not follow it.  */
  261. extern int lstat (__const char *__restrict __file,
  262.           struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
  263. # else
  264. #  ifdef __REDIRECT_NTH
  265. extern int __REDIRECT_NTH (lstat,
  266.                (__const char *__restrict __file,
  267.                 struct stat *__restrict __buf), lstat64)
  268.      __nonnull ((1, 2));
  269. #  else
  270. #   define lstat lstat64
  271. #  endif
  272. # endif
  273. # ifdef __USE_LARGEFILE64
  274. extern int lstat64 (__const char *__restrict __file,
  275.             struct stat64 *__restrict __buf)
  276.      __THROW __nonnull ((1, 2));
  277. # endif
  278. #endif
  279.  
  280. /* Set file access permissions for FILE to MODE.
  281.    If FILE is a symbolic link, this affects its target instead.  */
  282. extern int chmod (__const char *__file, __mode_t __mode)
  283.      __THROW __nonnull ((1));
  284.  
  285. #ifdef __USE_BSD
  286. /* Set file access permissions for FILE to MODE.
  287.    If FILE is a symbolic link, this affects the link itself
  288.    rather than its target.  */
  289. extern int lchmod (__const char *__file, __mode_t __mode)
  290.      __THROW __nonnull ((1));
  291. #endif
  292.  
  293. /* Set file access permissions of the file FD is open on to MODE.  */
  294. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  295. extern int fchmod (int __fd, __mode_t __mode) __THROW;
  296. #endif
  297.  
  298. #ifdef __USE_ATFILE
  299. /* Set file access permissions of FILE relative to
  300.    the directory FD is open on.  */
  301. extern int fchmodat (int __fd, __const char *__file, __mode_t mode, int __flag)
  302.      __THROW __nonnull ((2)) __wur;
  303. #endif /* Use ATFILE.  */
  304.  
  305.  
  306.  
  307. /* Set the file creation mask of the current process to MASK,
  308.    and return the old creation mask.  */
  309. extern __mode_t umask (__mode_t __mask) __THROW;
  310.  
  311. #ifdef    __USE_GNU
  312. /* Get the current `umask' value without changing it.
  313.    This function is only available under the GNU Hurd.  */
  314. extern __mode_t getumask (void) __THROW;
  315. #endif
  316.  
  317. /* Create a new directory named PATH, with permission bits MODE.  */
  318. extern int mkdir (__const char *__path, __mode_t __mode)
  319.      __THROW __nonnull ((1));
  320.  
  321. #ifdef __USE_ATFILE
  322. /* Like mkdir, create a new directory with permission bits MODE.  But
  323.    interpret relative PATH names relative to the directory associated
  324.    with FD.  */
  325. extern int mkdirat (int __fd, __const char *__path, __mode_t __mode)
  326.      __THROW __nonnull ((2));
  327. #endif
  328.  
  329. /* Create a device file named PATH, with permission and special bits MODE
  330.    and device number DEV (which can be constructed from major and minor
  331.    device numbers with the `makedev' macro above).  */
  332. #if defined __USE_MISC || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  333. extern int mknod (__const char *__path, __mode_t __mode, __dev_t __dev)
  334.      __THROW __nonnull ((1));
  335. #endif
  336.  
  337. #ifdef __USE_ATFILE
  338. /* Like mknod, create a new device file with permission bits MODE and
  339.    device number DEV.  But interpret relative PATH names relative to
  340.    the directory associated with FD.  */
  341. extern int mknodat (int __fd, __const char *__path, __mode_t __mode,
  342.             __dev_t __dev) __THROW __nonnull ((2));
  343. #endif
  344.  
  345.  
  346. /* Create a new FIFO named PATH, with permission bits MODE.  */
  347. extern int mkfifo (__const char *__path, __mode_t __mode)
  348.      __THROW __nonnull ((1));
  349.  
  350. #ifdef __USE_ATFILE
  351. /* Like mkfifo, create a new FIFO with permission bits MODE.  But
  352.    interpret relative PATH names relative to the directory associated
  353.    with FD.  */
  354. extern int mkfifoat (int __fd, __const char *__path, __mode_t __mode)
  355.      __THROW __nonnull ((2));
  356. #endif
  357.  
  358. #ifdef __USE_ATFILE
  359. /* Set file access and modification times relative to directory file
  360.    descriptor.  */
  361. extern int utimensat (int __fd, __const char *__path,
  362.               __const struct timespec __times[2],
  363.               int __flags)
  364.      __THROW __nonnull ((2));
  365. #endif
  366.  
  367. #ifdef __USE_GNU
  368. /* XXX This will change to the macro for the next 2008 POSIX revision.  */
  369. /* Set file access and modification times of the file associated with FD.  */
  370. extern int futimens (int __fd, __const struct timespec __times[2]) __THROW;
  371. #endif
  372.  
  373. /* To allow the `struct stat' structure and the file type `mode_t'
  374.    bits to vary without changing shared library major version number,
  375.    the `stat' family of functions and `mknod' are in fact inline
  376.    wrappers around calls to `xstat', `fxstat', `lxstat', and `xmknod',
  377.    which all take a leading version-number argument designating the
  378.    data structure and bits used.  <bits/stat.h> defines _STAT_VER with
  379.    the version number corresponding to `struct stat' as defined in
  380.    that file; and _MKNOD_VER with the version number corresponding to
  381.    the S_IF* macros defined therein.  It is arranged that when not
  382.    inlined these function are always statically linked; that way a
  383.    dynamically-linked executable always encodes the version number
  384.    corresponding to the data structures it uses, so the `x' functions
  385.    in the shared library can adapt without needing to recompile all
  386.    callers.  */
  387.  
  388. #ifndef _STAT_VER
  389. # define _STAT_VER    0
  390. #endif
  391. #ifndef _MKNOD_VER
  392. # define _MKNOD_VER    0
  393. #endif
  394.  
  395. /* Wrappers for stat and mknod system calls.  */
  396. #ifndef __USE_FILE_OFFSET64
  397. extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
  398.      __THROW __nonnull ((3));
  399. extern int __xstat (int __ver, __const char *__filename,
  400.             struct stat *__stat_buf) __THROW __nonnull ((2, 3));
  401. extern int __lxstat (int __ver, __const char *__filename,
  402.              struct stat *__stat_buf) __THROW __nonnull ((2, 3));
  403. extern int __fxstatat (int __ver, int __fildes, __const char *__filename,
  404.                struct stat *__stat_buf, int __flag)
  405.      __THROW __nonnull ((3, 4));
  406. #else
  407. # ifdef __REDIRECT_NTH
  408. extern int __REDIRECT_NTH (__fxstat, (int __ver, int __fildes,
  409.                       struct stat *__stat_buf), __fxstat64)
  410.      __nonnull ((3));
  411. extern int __REDIRECT_NTH (__xstat, (int __ver, __const char *__filename,
  412.                      struct stat *__stat_buf), __xstat64)
  413.      __nonnull ((2, 3));
  414. extern int __REDIRECT_NTH (__lxstat, (int __ver, __const char *__filename,
  415.                       struct stat *__stat_buf), __lxstat64)
  416.      __nonnull ((2, 3));
  417. extern int __REDIRECT_NTH (__fxstatat, (int __ver, int __fildes,
  418.                     __const char *__filename,
  419.                     struct stat *__stat_buf, int __flag),
  420.                __fxstatat64) __nonnull ((3, 4));
  421.  
  422. # else
  423. #  define __fxstat __fxstat64
  424. #  define __xstat __xstat64
  425. #  define __lxstat __lxstat64
  426. # endif
  427. #endif
  428.  
  429. #ifdef __USE_LARGEFILE64
  430. extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
  431.      __THROW __nonnull ((3));
  432. extern int __xstat64 (int __ver, __const char *__filename,
  433.               struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
  434. extern int __lxstat64 (int __ver, __const char *__filename,
  435.                struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
  436. extern int __fxstatat64 (int __ver, int __fildes, __const char *__filename,
  437.              struct stat64 *__stat_buf, int __flag)
  438.      __THROW __nonnull ((3, 4));
  439. #endif
  440. extern int __xmknod (int __ver, __const char *__path, __mode_t __mode,
  441.              __dev_t *__dev) __THROW __nonnull ((2, 4));
  442.  
  443. extern int __xmknodat (int __ver, int __fd, __const char *__path,
  444.                __mode_t __mode, __dev_t *__dev)
  445.      __THROW __nonnull ((3, 5));
  446.  
  447. #if defined __GNUC__ && __GNUC__ >= 2 && defined __USE_EXTERN_INLINES
  448. /* Inlined versions of the real stat and mknod functions.  */
  449.  
  450. __extern_inline int
  451. __NTH (stat (__const char *__path, struct stat *__statbuf))
  452. {
  453.   return __xstat (_STAT_VER, __path, __statbuf);
  454. }
  455.  
  456. # if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  457. __extern_inline int
  458. __NTH (lstat (__const char *__path, struct stat *__statbuf))
  459. {
  460.   return __lxstat (_STAT_VER, __path, __statbuf);
  461. }
  462. # endif
  463.  
  464. __extern_inline int
  465. __NTH (fstat (int __fd, struct stat *__statbuf))
  466. {
  467.   return __fxstat (_STAT_VER, __fd, __statbuf);
  468. }
  469.  
  470. # ifdef __USE_ATFILE
  471. __extern_inline int
  472. __NTH (fstatat (int __fd, __const char *__filename, struct stat *__statbuf,
  473.         int __flag))
  474. {
  475.   return __fxstatat (_STAT_VER, __fd, __filename, __statbuf, __flag);
  476. }
  477. # endif
  478.  
  479. # if defined __USE_MISC || defined __USE_BSD
  480. __extern_inline int
  481. __NTH (mknod (__const char *__path, __mode_t __mode, __dev_t __dev))
  482. {
  483.   return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
  484. }
  485. # endif
  486.  
  487. # ifdef __USE_ATFILE
  488. __extern_inline int
  489. __NTH (mknodat (int __fd, __const char *__path, __mode_t __mode,
  490.         __dev_t __dev))
  491. {
  492.   return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev);
  493. }
  494. # endif
  495.  
  496. # if defined __USE_LARGEFILE64 \
  497.   && (! defined __USE_FILE_OFFSET64 \
  498.       || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
  499. __extern_inline int
  500. __NTH (stat64 (__const char *__path, struct stat64 *__statbuf))
  501. {
  502.   return __xstat64 (_STAT_VER, __path, __statbuf);
  503. }
  504.  
  505. #  if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  506. __extern_inline int
  507. __NTH (lstat64 (__const char *__path, struct stat64 *__statbuf))
  508. {
  509.   return __lxstat64 (_STAT_VER, __path, __statbuf);
  510. }
  511. #  endif
  512.  
  513. __extern_inline int
  514. __NTH (fstat64 (int __fd, struct stat64 *__statbuf))
  515. {
  516.   return __fxstat64 (_STAT_VER, __fd, __statbuf);
  517. }
  518.  
  519. #  ifdef __USE_GNU
  520. __extern_inline int
  521. __NTH (fstatat64 (int __fd, __const char *__filename, struct stat64 *__statbuf,
  522.           int __flag))
  523. {
  524.   return __fxstatat64 (_STAT_VER, __fd, __filename, __statbuf, __flag);
  525. }
  526. #  endif
  527.  
  528. # endif
  529.  
  530. #endif
  531.  
  532. __END_DECLS
  533.  
  534.  
  535. #endif /* sys/stat.h  */
  536.